/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Railroad.GUI;

import Railroad.Components.Signal;
import Railroad.Components.TrackNode;
import Railroad.StavVytvoreniaCesty;
import Railroad.Track;
import Railroad.Zoznam;
import java.awt.Color;
import java.awt.Container;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 *
 * @author Steeween
 */
public class RiadenieNavestidiel {

    private ArrayList<JLabel> listHlavne = new ArrayList<>();
    private ArrayList<JLabel> listPosunove = new ArrayList<>();
    private ArrayList<JLabel> listPredzvesti = new ArrayList<>();
    private ArrayList<Track> z;

    public RiadenieNavestidiel(Zoznam z) {
        for (int i = 0; i < z.dajPole().size(); i++) {
            if (z.dajPole().get(i) instanceof Signal) {
                Signal s = (Signal) z.dajPole().get(i);
                // JLabel label=  new JLabel(s.getName() + "");
                if (s.isMain()) {
                    NavestidloLabel label = new NavestidloLabel(s.getName(), s.getId());
                    listHlavne.add(label);
                } else {
                    NavestidloLabel label = new NavestidloLabel(s.getName(), s.getId());
                    listPosunove.add(label);
                }
            }

        }
        listPredzvesti.add(new NavestidloLabel("pL", 1000));
        listPredzvesti.add(new NavestidloLabel("pS", 999));
        JFrame i_frame = new JFrame("Navestidla");

        Container pane = i_frame.getContentPane();
        // pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));  // any LayoutManager you need

        for (int i = 0; i < listHlavne.size(); i++) {
            pane.add(listHlavne.get(i));
            listHlavne.get(i).setBounds(20 + 105 * i, 20, 100, 210);
            JLabel nadpis = new JLabel(listHlavne.get(i).getText());
            nadpis.setBounds(60 + 105 * i, 5, 100, 10);
            pane.add(nadpis);
            listHlavne.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/Cervena1.png")));

        }
        for (int i = 0; i < listPosunove.size(); i++) {
            pane.add(listPosunove.get(i));
            listPosunove.get(i).setBounds(20 + 105 * i, 260, 100, 200);
            JLabel nadpis = new JLabel(listPosunove.get(i).getText());
            nadpis.setBounds(60 + 105 * i, 240, 100, 20);
            pane.add(nadpis);
            listPosunove.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/modra.png")));
        }
        for (int i = 0; i < listPredzvesti.size(); i++) {
            pane.add(listPredzvesti.get(i));
            listPredzvesti.get(i).setBounds(20 + 105 * i, 490, 100, 200);
            JLabel nadpis = new JLabel(listPredzvesti.get(i).getText());
            pane.add(nadpis);
            nadpis.setBounds(60 + 105 * i, 470, 50, 20);

            listPredzvesti.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/predzvest_zlta.png")));
        }
        JLabel nadpis = new JLabel("");
        pane.add(nadpis);
        //pane.add(Box.createRigidArea(new Dimension(2, 0)));  // space after JLabel ?
        i_frame.setSize(800, 1000);
        i_frame.setVisible(true);
    }

    public ArrayList<JLabel> getListHlavne() {
        return listHlavne;
    }

    public void nastavHlavneNavestidlo(int i, ImageIcon o) {
        for (int j = 0; j < listHlavne.size(); j++) {
            JLabel jLabel = listHlavne.get(j);
            NavestidloLabel n = (NavestidloLabel) jLabel;
            if (n.getId() == i) {
                n.setIcon(o);
            }

        }
    }

    public void nastavZltuPredzvest(int i) {
        for (int j = 0; j < listPredzvesti.size(); j++) {
            JLabel jLabel = listPredzvesti.get(j);
            NavestidloLabel n = (NavestidloLabel) jLabel;
            if (n.getId() == i) {
                n.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/predzvest_zlta.png")));
            }

        }
        //list.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/zltablikajuca.gif")));
    }

    public void nastavZelenaPredzvest(int i) {
        for (int j = 0; j < listPredzvesti.size(); j++) {
            JLabel jLabel = listPredzvesti.get(j);
            NavestidloLabel n = (NavestidloLabel) jLabel;
            if (n.getId() == i) {
                n.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/predzvest_zelena.png")));
            }

        }
        //list.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/zltablikajuca.gif")));
    }

    public void nastavBielu(int i) {
        for (int j = 0; j < listPosunove.size(); j++) {
            JLabel jLabel = listPosunove.get(j);
            NavestidloLabel n = (NavestidloLabel) jLabel;
            if (n.getId() == i) {
                n.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/biela.png")));
            }

        }
        //list.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/zltablikajuca.gif")));
    }

    public void nastavModru(int i) {
        for (int j = 0; j < listPosunove.size(); j++) {
            JLabel jLabel = listPosunove.get(j);
            NavestidloLabel n = (NavestidloLabel) jLabel;
            if (n.getId() == i) {
                n.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/modra.png")));
            }

        }
        //list.get(i).setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/zltablikajuca.gif")));
    }

    public void nastavNavestidloPodlaNasledujuceho(Track aktualna, Track nasledujuca) {
        switch (aktualna.dajMaxRychlost()) {
            case 40:
                switch (nasledujuca.dajMaxRychlost()) {
                    case 40:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40a40.gif")));
                        break;
                    case 60:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40a60.gif")));
                        break;
                    case 80:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40a80.gif")));
                        break;
                    case 100:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40a100.gif")));
                        break;
                }
                break;
            case 60:
                switch (nasledujuca.dajMaxRychlost()) {
                    case 40:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60a40.gif")));
                        break;
                    case 60:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60a60.gif")));
                        break;
                    case 80:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60a80.gif")));
                        break;
                    case 100:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60a100.gif")));
                        break;
                }
                break;
            case 80:
                switch (nasledujuca.dajMaxRychlost()) {
                    case 40:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80a40.gif")));
                        break;
                    case 60:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80a60.gif")));
                        break;
                    case 80:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80a80.gif")));
                        break;
                    case 100:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80a100.gif")));
                        break;
                }
                break;
            case 100:
                switch (nasledujuca.dajMaxRychlost()) {
                    case 40:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100a40.gif")));
                        break;
                    case 60:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100a60.gif")));
                        break;
                    case 80:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100a80.gif")));
                        break;
                    case 100:
                        this.nastavHlavneNavestidlo(aktualna.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100a100.gif")));
                        break;
                }
                break;
        }
    }

    public void setZ(ArrayList<Track> z) {
        this.z = z;
    }

    public void prestavNavestidla() {
        for (int i = 0; i < z.size(); i++) {
            Track track = z.get(i);
            if (track.dajStav() == StavVytvoreniaCesty.fazaBiela) {
                if (track.getNasledujuca() > -1) {//ak ma nasledujucu
                    Track nasledujuca = null;
                    for (int j = 0; j < z.size(); j++) {//zistenie nasledujucej trate
                        Track t = z.get(j);
                        if (t.getId() == track.getNasledujuca()) {
                            nasledujuca = t;
                            break;
                        }
                    }
                    Signal dalsieNavestidlo = nasledujuca.dajStartovacieNavestidlo();
                    if (dalsieNavestidlo.getColor() == Color.GREEN) {
                       // switch (track.dajMaxRychlost()) {
                        // case 40:

                        //this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40a40.gif")));
                        // break;
                        // }
                        this.nastavNavestidloPodlaNasledujuceho(track, nasledujuca);
                    } else {
                        TrackNode poslednaCast = track.getListOfNodes().get(track.getListOfNodes().size() - 1);
                        if (poslednaCast.getBusy()) {
                            if (track.dajStartovacieNavestidlo().getColor() == Color.WHITE) {
                                //this.nastavBielaBlikajuca(track.dajStartovacieNavestidlo().getId());
                                this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/CervenaBielaPomaly.gif")));
                            }
                        } else {
                            switch (track.dajMaxRychlost()) {
                                case 40:
                                    //this.nastav40aStoj(track.dajStartovacieNavestidlo().getId());
                                    this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40aVystraha.png")));
                                    break;
                                case 60:
                                    //this.nastav40aStoj(track.dajStartovacieNavestidlo().getId());
                                    this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60aVystraha.png")));
                                    break;
                                case 80:
                                    //this.nastav40aStoj(track.dajStartovacieNavestidlo().getId());
                                    this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80aVystraha.png")));
                                    break;
                                case 100:
                                    //this.nastav40aStoj(track.dajStartovacieNavestidlo().getId());
                                    this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100aVystraha.png")));
                                    break;
                            }
                        }
                        if (track.dajStartovacieNavestidlo().getName().compareTo("L") == 0) {
                            this.nastavZelenaPredzvest(1000);
                        }
                        if (track.dajStartovacieNavestidlo().getName().compareTo("S") == 0) {
                            this.nastavZelenaPredzvest(999);
                        }

                    }

                } else {//ak nema nasledujucu
                    Signal signal = track.dajStartovacieNavestidlo();

                    if (signal.isMain()) {
                        //this.nastav40aVolno(signal.getId());
                        switch (track.dajMaxRychlost()) {
                            case 40:
                                this.nastavHlavneNavestidlo(signal.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40aVolno.png")));
                                break;
                            case 60:
                                this.nastavHlavneNavestidlo(signal.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60aVolno.png")));
                                break;
                            case 80:
                                this.nastavHlavneNavestidlo(signal.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80aVolno.png")));
                                break;
                            case 100:
                                this.nastavHlavneNavestidlo(signal.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100aVolno.png")));
                                break;
                        }
                    } else {
                        this.nastavBielu(signal.getId());
                    }
                    if (track.getPredchadzajuca() > -1) {
                        Track predchadzajuca = null;
                        for (int j = 0; j < z.size(); j++) {
                            Track t = z.get(j);
                            if (t.getId() == track.getPredchadzajuca()) {
                                predchadzajuca = t;
                                break;
                            }
                        }
                        Signal predosleNavestidlo = predchadzajuca.dajStartovacieNavestidlo();
                        if (predosleNavestidlo.getColor() == Color.GREEN) {
                            this.nastavNavestidloPodlaNasledujuceho(predchadzajuca, track);
                        }

                    }
                }

            }
            if (track.dajStav() == StavVytvoreniaCesty.rusena) {
                Signal signal = track.dajStartovacieNavestidlo();
                //this.nastavCervenu(signal.getId() - 10);
                this.nastavHlavneNavestidlo(track.dajStartovacieNavestidlo().getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/Cervena1.png")));
                if (signal.isMain()) {
                    // this.nastavCervenu(signal.getId());
                    if (signal.getName().compareTo("L") == 0) {
                        this.nastavZltuPredzvest(1000);
                    }
                    if (signal.getName().compareTo("P") == 0) {
                        this.nastavZltuPredzvest(999);
                    }
                } else {
                    this.nastavModru(signal.getId());
                }

                if (track.getPredchadzajuca() > -1) {
                    Track predchadzajuca = null;
                    for (int j = 0; j < z.size(); j++) {
                        Track t = z.get(j);
                        if (t.getId() == track.getPredchadzajuca()) {
                            predchadzajuca = t;
                            break;
                        }
                    }
                    Signal predosleNavestidlo = predchadzajuca.dajStartovacieNavestidlo();
                    if (predosleNavestidlo.getColor() == Color.GREEN) {
                        switch (predchadzajuca.dajMaxRychlost()) {
                            case 40:
                                //this.nastav40aStoj(predosleNavestidlo.getId());
                                this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40aVystraha.png")));
                                break;
                            case 60:
                                //this.nastav40aStoj(predosleNavestidlo.getId());
                                this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60aVystraha.png")));
                                break;
                            case 80:
                                //this.nastav40aStoj(predosleNavestidlo.getId());
                                this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80aVystraha.png")));
                                break;
                            case 100:
                                //this.nastav40aStoj(predosleNavestidlo.getId());
                                this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100aVystraha.png")));
                                break;
                        }
                    }

                }
            }
            if (track.dajStav() == StavVytvoreniaCesty.vytvorena) {
                Signal s = track.dajStartovacieNavestidlo();
                boolean obsadenie = false;//nohodne obsadenie trate
                List<TrackNode> pole = track.getListOfNodes();
                for (TrackNode t : pole) {
                    if (t.getBusy()) {
                        obsadenie = true;
                        break;
                    }
                }
                if(s.getColor() == Color.WHITE)
                {
                    this.nastavHlavneNavestidlo(s.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/CervanaBielaPomaly.gif")));
                if (track.dajStartovacieNavestidlo().getName().compareTo("L") == 0) {
                        this.nastavZelenaPredzvest(1000);
                    }
                    if (track.dajStartovacieNavestidlo().getName().compareTo("S") == 0) {
                        this.nastavZelenaPredzvest(999);
                    }
                
                }else{
                if (s.getColor() == Signal.defaultColor || obsadenie) {
                    //this.nastavCervenu(s.getId());
                    this.nastavHlavneNavestidlo(s.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/Cervena1.png")));

                    if (track.dajStartovacieNavestidlo().getName().compareTo("L") == 0) {
                        this.nastavZltuPredzvest(1000);
                    }
                    if (track.dajStartovacieNavestidlo().getName().compareTo("S") == 0) {
                        this.nastavZltuPredzvest(999);
                    }
                    if (track.getPredchadzajuca() > -1) {
                        Track predchadzajuca = null;
                        for (int j = 0; j < z.size(); j++) {
                            Track t = z.get(j);
                            if (t.getId() == track.getPredchadzajuca()) {
                                predchadzajuca = t;
                                break;
                            }
                        }
                        Signal predosleNavestidlo = predchadzajuca.dajStartovacieNavestidlo();
                        if (predosleNavestidlo.getColor() == Color.GREEN) {

                            switch (track.dajMaxRychlost()) {
                                case 40:
                                    //this.nastav40aStoj(predosleNavestidlo.getId());
                                    this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/40aVystraha.png")));
                                    break;
                                case 60:
                                    //this.nastav40aStoj(predosleNavestidlo.getId());
                                    this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/60aVystraha.png")));
                                    break;
                                case 80:
                                    //this.nastav40aStoj(predosleNavestidlo.getId());
                                    this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/80aVystraha.png")));
                                    break;
                                case 100:
                                    //this.nastav40aStoj(predosleNavestidlo.getId());
                                    this.nastavHlavneNavestidlo(predosleNavestidlo.getId(), new javax.swing.ImageIcon(getClass().getResource("/resources/100aVystraha.png")));
                                    break;
                            }
                        }

                    }
                }
            }
            }
        }
    }
}
